package com.apa7.keepaccounts.controller;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.apa7.keepaccounts.dto.ReturnData;
import com.apa7.keepaccounts.entity.PayMode;
import com.apa7.keepaccounts.entity.PayType;
import com.apa7.keepaccounts.entity.User;
import com.apa7.keepaccounts.service.UserService;
import com.apa7.keepaccounts.util.Tool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 获取个人信息（头像，昵称）
     * @return returnData
     */
    @RequestMapping("/getInfo")
    public ReturnData getInfo(){
        //获取参数
        JSONObject data= Tool.getJsonOject();
        //交给service获取
        User user=userService.getInfo(data.getString("key"));

        //准备返回信息
        JSONObject returnData=new JSONObject();
        returnData.put("wxImg",user.getWxImg());
        returnData.put("wxName",user.getWxName());

        return new ReturnData(0,returnData);
    }

    /**
     * 获取支出类型和支出方式
     * @return returnData
     */
    @RequestMapping("/getPayTypeAndPayMode")
    public ReturnData getPayTypeAndPayMode(){
        //获取参数
        JSONObject data= Tool.getJsonOject();
        //交给service获取
        User user=userService.getInfo(data.getString("key"));
        //准备返回信息
        List<PayType> payTypes= JSONArray.parseArray(user.getPayType(),PayType.class);
        List<PayMode> payModes= JSONArray.parseArray(user.getPayMode(),PayMode.class);
        HashMap<String,List<?>> hashMap=new HashMap<>();
        hashMap.put("payType",payTypes);
        hashMap.put("payMode",payModes);

        return new ReturnData(0,hashMap);
    }

    /**
     * 获取支出类型
     * @return returnData
     */
    @RequestMapping("/getPayType")
    public ReturnData getPayType(){
        //获取参数
        JSONObject data= Tool.getJsonOject();
        //交给service获取
        User user=userService.getInfo(data.getString("key"));
        //准备返回信息
        List<PayType> payTypes= JSONArray.parseArray(user.getPayType(),PayType.class);

        return new ReturnData(0,payTypes);

    }

    /**
     * 获取支出方式
     * @return returnData
     */
    @RequestMapping("/getPayMode")
    public ReturnData getPayMode(){
        //获取参数
        JSONObject data= Tool.getJsonOject();
        //交给service获取
        User user=userService.getInfo(data.getString("key"));

        //准备返回信息
        List<PayMode> PayModes= JSONArray.parseArray(user.getPayMode(),PayMode.class);

        return new ReturnData(0,PayModes);
    }

    /**
     * 设置支出类型类型置顶
     * @return returnData
     */
    @RequestMapping("/payTypeTop")
    public ReturnData payTypeTop(){
        //获取参数
        JSONObject data= Tool.getJsonOject();
        //设置置顶
        List<PayType> payTypes=userService.payTypeTop(data.getString("key"),data.getIntValue("index"));
        if(payTypes==null){
            return new ReturnData("置顶设置失败");
        }

        return new ReturnData(0,payTypes);
    }

    /**
     * 设置支出方式类型置顶
     * @return returnData
     */
    @RequestMapping("/payModeTop")
    public ReturnData payModeTop(){
        //获取参数
        JSONObject data= Tool.getJsonOject();
        //设置置顶
        List<PayMode> payModes=userService.payModeTop(data.getString("key"),data.getIntValue("index"));
        if(payModes==null){
            return new ReturnData("置顶设置失败");
        }

        return new ReturnData(0,payModes);
    }

    /**
     * 添加一个支出类型
     * @return returnData
     */
    @RequestMapping("/payTypeAdd")
    public ReturnData payTypeAdd(){
        //获取参数
        JSONObject data= Tool.getJsonOject();
        if(data.getString("name").equals("")){
            return new ReturnData("添加的类型为空");
        }

        //添加
        PayType payType=new PayType();
        payType.setPayTypeId(0);
        payType.setTypeImg("");
        payType.setTypeName(data.getString("name"));
        List<PayType> payTypes=userService.payTypeAdd(data.getString("key"),payType);
        if(payTypes==null){
            return new ReturnData("添加失败");
        }

        return new ReturnData(0,payTypes);
    }

    /**
     * 添加一个支出方式
     * @return returnData
     */
    @RequestMapping("/payModeAdd")
    public ReturnData payModeAdd(){
        //获取参数
        JSONObject data= Tool.getJsonOject();
        if(data.getString("name").equals("")){
            return new ReturnData("添加的类型为空");
        }

        //添加
        PayMode payMode=new PayMode();
        payMode.setPayModeId(0);
        payMode.setModeImg("");
        payMode.setModeName(data.getString("name"));
        List<PayMode> payModes=userService.payModeAdd(data.getString("key"),payMode);
        if(payModes==null){
            return new ReturnData("添加失败");
        }

        return new ReturnData(0,payModes);
    }

    /**
     * 删除一个支出类型
     * @return returnData
     */
    @RequestMapping("/payTypeDelete")
    public ReturnData payTypeDelete(){
        //获取参数
        JSONObject data= Tool.getJsonOject();

        //删除
        List<PayType> payTypes=userService.payTypeDelete(data.getString("key"),data.getIntValue("index"));
        if(payTypes==null){
            return new ReturnData("删除失败");
        }

        return new ReturnData(0,payTypes);
    }

    /**
     * 删除一个支付方式
     * @return returnData
     */
    @RequestMapping("/payModeDelete")
    public ReturnData payModeDelete(){
        //获取参数
        JSONObject data= Tool.getJsonOject();

        //删除
        List<PayMode> payModes=userService.payModeDelete(data.getString("key"),data.getIntValue("index"));
        if(payModes==null){
            return new ReturnData("删除失败");
        }

        return new ReturnData(0,payModes);
    }
}
